GdkWaylandWindow: Force window titles to valid utf8
authorTimm Bäder <mail@baedert.org>
Mon, 20 Mar 2017 18:56:22 +0000 (19:56 +0100)
committerTimm Bäder <mail@baedert.org>
Mon, 20 Mar 2017 19:04:26 +0000 (20:04 +0100)
Use the new g_utf8_make_valid in case the given title is not valid utf8.
Also bump the glib requirement to 2.51.5.

configure.ac
gdk/wayland/gdkwindow-wayland.c

index c91fb7d888d71ed28f97bee419c173012c5e03d7..d59b6bc1c8b11fd20556eb69ee645ed4ce6e85d6 100644 (file)
@@ -42,8 +42,8 @@ m4_define([gtk_binary_version], [4.0.0])
 
 # required versions of other packages
 m4_define([glib_required_major], [2])
-m4_define([glib_required_minor], [49])
-m4_define([glib_required_micro], [4])
+m4_define([glib_required_minor], [51])
+m4_define([glib_required_micro], [5])
 m4_define([glib_required_version],
           [glib_required_major.glib_required_minor.glib_required_micro])
 m4_define([glib_min_required_minor],
index 5c09541951b642f82a9ea98c0379d671c1268ca9..17fb7204722d9ad9cfb45f9456d3a2c8b16d10b8 100644 (file)
@@ -3041,6 +3041,8 @@ gdk_wayland_window_set_title (GdkWindow   *window,
 {
   GdkWindowImplWayland *impl;
   const char *end;
+  gsize title_length;
+
   g_return_if_fail (title != NULL);
 
   if (GDK_WINDOW_DESTROYED (window))
@@ -3053,10 +3055,18 @@ gdk_wayland_window_set_title (GdkWindow   *window,
 
   g_free (impl->title);
 
-  g_utf8_validate (title, MAX_WL_BUFFER_SIZE, &end);
-  impl->title = g_malloc (end - title + 1);
-  memcpy (impl->title, title, end - title);
-  impl->title[end - title] = '\0';
+  title_length = MIN (strlen (title), MAX_WL_BUFFER_SIZE);
+  if (g_utf8_validate (title, title_length, &end))
+    {
+      impl->title = g_malloc (end - title + 1);
+      memcpy (impl->title, title, end - title);
+      impl->title[end - title] = '\0';
+    }
+  else
+    {
+      impl->title = g_utf8_make_valid (title, title_length);
+      g_warning ("Invalid utf8 passed to gdk_window_set_title: '%s'", title);
+    }
 
   gdk_wayland_window_sync_title (window);
 }